/**
 * 封装全局工具方法
 * 注意：去入口执行这个 js 模块
 */
import dayjs from 'dayjs'
// 向 wx 全局对象中追加自己封装的方法
wx.utils = {
  // 技巧：把方法都统一放到对象中管理,提高可维护性
  /**
   * 需求：基本wx.showToast二次封装
   * 效果：wx.utils.message('提示消息内容', 'sucess')
   */
  /**
   * 
   * @param {*} title 提示内容
   * @param {*} icon 图标：success ｜ error ｜ loading ｜ none
   */
  message(title, icon = "none") {
    // 内核？wx.showToast
    wx.showToast({
      title,
      icon,
      duration: 2500,
      mask: true,
    });
  },
  // 技巧：把不同的部分当参数传入=》复用
  /**
   * 
   * @param {*} filePath 上传的图片地址
   * @param {*} formData 上传额外的参数
   * @returns 
   */
  upload(filePath, formData) {
    /**
     * resolve(await或 then 获取的数据)
     * reject(catch 捕获的错误数据)
     */
    return new Promise((resolve, reject) => {
      wx.uploadFile({
        url: `${wx.baseUrl}/upload`, // 上传地址
        filePath, // 上传图片地址
        name: 'file', // 上传文件的 key（后台定义的）
        // 上传请求需要传递的其他参数
        formData,
        header: {
          Authorization: getApp().state.token
        },
        success: (result) => {
          // console.log('上传结果：', result.data)
          const res = JSON.parse(result.data)
          console.log('上传结果：', res)
          // 提示
          setTimeout(() => {
            wx.utils.message(res.message)
          }, 1000);
          if (res.code === 1e4) {
            // 上传成功
            // this.setData({
            //   'user.photo': res.data.url
            // })
            // 通过 resolve 对外传递成功的结果
            resolve(res)
          } else {
            // 上传失败
            // 处理 token 过期
            if (res.code === 401) {
              // 读取当前历史栈
              const pageStack = getCurrentPages()
              // 取出当前页面路径，登录成功能跳转到该页面
              const currentPage = pageStack[pageStack.length - 1]
              wx.redirectTo({
                url: `/pages/login/index?redirectUrl=/${currentPage.route}`
              });
            }
            // 通过 reject 对外传递失败的结果
            reject(res)
          }
        }
      });
    })
  },
  /**
   * 
   * @param {*} date 格式化时间
   * @param {*} type 格式化格式
   * @returns 
   */
  formatTime(date, type = 'YYYY-MM-DD') {
    return dayjs(date).format(type)
  }

}